package com.aboo.design.proxy;

/**
 * 代理模式
 * 用原型实例指定创建对象的种类，并且通过拷贝这些原型创建新的对象。
 * @author louan
 * @date 2024/1/31
 * @param
 * @return
 **/
public class ProxyPattern {
    public static void main(String[] args) {
        Subject proxy = new ProxySubject();
        proxy.request();
    }
}

//抽象主题
interface Subject {
    void request();
}

//真实主题
class RealSubject implements Subject {
    public void request() {
        System.out.println("访问真实主题方法...");
    }
}

//代理
class ProxySubject implements Subject {
    private RealSubject realSubject;

    public void request() {
        if (realSubject == null) {
            realSubject = new RealSubject();
        }
        preRequest();
        realSubject.request();
        postRequest();
    }

    public void preRequest() {
        System.out.println("访问真实主题之前的预处理。");
    }

    public void postRequest() {
        System.out.println("访问真实主题之后的后续处理。");
    }
}